import request from 'axios'
import { getItem, setItem, removeItem } from '@/utils/token'
import { refreshTokenAPI } from '@/api'
import router from '@/router'
request.defaults.baseURL = 'http://geek.itheima.net/'
request.defaults.timeout = 8000

// 添加请求拦截器
request.interceptors.request.use(function (config) {
  if (config.headers.Authorization === undefined) {
    config.headers.Authorization = `Bearer ${getItem()}`
  }
  // console.log(config)
  // 在发送请求之前做些什么
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response
}, async function (error) {
  // 对响应错误做点什么
  if (error.response.status === 401) {
    // 1.用户可感知，需要重新登录
    // // 清除token
    // removeItem()
    // 强制跳到登录页重新登录
    // router.replace('/login')

    // console.dir(error)
    // 2. 用户无感知，直接在报错的同时调接口获取一个token，重新发起请求并返回
    // 清除token
    removeItem()
    // 调用函数  refreshTokenAPI()  生成新的token，并重新存储到本地
    const res = await refreshTokenAPI()
    // console.log(res)
    setItem(res.data.data.token)

    // 给上次错误的请求重新添加  新的token
    error.config.headers.Authorization = 'Bearer ' + res.data.data.token
    // 重新调用这个请求，并返回
    return request(error.config)
  }
  if (error.response.status === 500) {
    // 1.用户可感知，需要重新登录
    // // 清除token
    removeItem()
    // 强制跳到登录页重新登录
    localStorage.removeItem('refresh_token')
    // console.log(router)
    router.replace({
      path: '/login',
      query: {
        pa: router.currentRoute.fullPath
      }
    })
  }
  return Promise.reject(error)
})

export default ({ url, method, params, data, headers }) => {
  return request({
    url,
    method,
    params,
    data,
    headers

  })
}
